﻿#include<iostream>
using namespace std;

class Date
{
public:
	Date(int year = 1, int month = 1, int day = 1)
	{
		_year = year;
		_month = month;
		_day = day;
	}

	void Print()
	{
		cout << _year << "-" << _month << "-" << _day << endl;
	}

	//2. ==运算符写在成员函数
	bool operator==(const Date& d)
	{
		return _year == d._year
			&& _month == d._month
			&& _day == d._day;
	}

	//前置++
	Date& operator++()
	{
		cout << "前置++" << endl;
		this->_day += 1;
		return *this;
	}

	//后置++ &防止多次后置++形成的值是一个新的地址了,结果不变
	Date& operator++(int)//int起到一个重载作用
	{
		cout << "后置++" << endl;
		static Date tmp;
		this->_day = tmp._day++;
		return *this;
	}
//private:
	int _year;
	int _month;
	int _day;
};

// 重载为全局的⾯临对象访问私有成员变量的问题
// 有⼏种⽅法可以解决：
// 1、成员放公有
// 2、Date提供getxxx函数
// 3、友元函数
// 4、重载为成员函数

//1.写在全局函数
//bool operator==(const Date &d1, const Date &d2)
//{	
//	return d1._year == d2._year
//		&& d1._month == d2._month
//		&& d1._day == d2._day;
//}


int main()
{	
	//Date d1;
	//Date d2;
	//bool a = (d1 == d2);
	//cout << a << endl;
	Date d1;
	//++d1 前置++
	((d1++)++)++;//后置++
	d1.Print();
}